"""
此脚本用于根据总表file_b查询对应的字段填写至file_a
"""
import openpyxl


def match_tax_id(file_a, file_b, save_dir='./Filled.xlsx'):
    """
    :param file_a: 待填写的表格
    :param file_b: 用于查询的资料总表
    :param save_dir: 自动填写后表格的存放目录，默认输出为脚本根目录的Filled.xlsx
    """
    # 打开工作簿
    wb_a = openpyxl.load_workbook(file_a)
    wb_b = openpyxl.load_workbook(file_b)

    # 选择活动工作表
    ws_a = wb_a.active
    ws_b = wb_b.active

    # 创建一个字典以存储B表中的税号
    tax_id_dict = {}
    for row in ws_b.iter_rows(min_row=2, min_col=2, max_col=3, values_only=True):
        # row=1是标题，从row=2开始 col=2是名称，col=3是税号
        name, tax_id = row
        if name and tax_id:
            if name not in tax_id_dict:
                tax_id_dict[name] = []
            tax_id_dict[name].append(tax_id)

    # 从第三行开始处理A表
    for row in ws_a.iter_rows(min_row=3, min_col=2, max_col=3):
        # 从min_row=3开始填写 min_col=2是标题 min_row=3是税号要填写的位置

        name_cell = row[0]  # 第二列
        tax_id_cell = row[1]  # 第三列

        # 如果A表的第三列已有税号，跳过该条记录
        if tax_id_cell.value is not None:
            continue

        if name_cell.value in tax_id_dict:
            # 优先选择91开头的税号
            preferred_tax_id = next((tax_id for tax_id in tax_id_dict[name_cell.value] if str(tax_id).startswith('91')),
                                    None)

            if preferred_tax_id:
                tax_id_cell.value = preferred_tax_id  # 填写税号
            else:
                # 如果没有91开头的税号，选择第一个有效的税号
                first_valid_tax_id = next((tax_id for tax_id in tax_id_dict[name_cell.value] if tax_id is not None),
                                          None)
                if first_valid_tax_id:
                    tax_id_cell.value = first_valid_tax_id  # 填写税号
                else:
                    print(f"名称 '{name_cell.value}' 找到，但没有有效的税号")
        else:
            print(f"名称 '{name_cell.value}' 在资料总表中没有找到")

    # 保存更新后的A文件
    wb_a.save(save_dir)


if __name__ == "__main__":
    # 读取Excel文件
    unfilled_xlsx = r'简索目录 - 发票管理-1-932.xlsx'  # 需要填写的表格，例如r'F:\工作文档\检索目录-发票管理-1-932.xlsx'
    index_file = r'资料总表.xlsx'  # 索引文件，例如r'F:\工作文档\资料总表.xlsx'
    save_directory = r'简索目录 - 发票管理-1-932_Format.xlsx'  # 输出文件地址，例如r'F:\工作文档\检索目录-发票管理-1-932-已修改.xlsx'

    match_tax_id(unfilled_xlsx, index_file, save_directory)
